From 77625388ed5cb8be28dab4517b282a650f65ebdb Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Thu, 17 Nov 2005 11:47:49 +0100 Subject: [PATCH] Fix IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS to work properly for 4MB superpages (32-bit non-pae). Signed-off-by: Keir Fraser --- linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c index 015e4a8d13..5239a18fc6 100644 --- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c +++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c @@ -219,7 +219,6 @@ static int privcmd_ioctl(struct inode *inode, struct file *file, #ifndef __ia64__ case IOCTL_PRIVCMD_GET_MACH2PHYS_MFNS: { - pgd_t *pgd; pud_t *pud; pmd_t *pmd; @@ -235,13 +234,13 @@ static int privcmd_ioctl(struct inode *inode, struct file *file, p = m.arr; - for(i=0; i < m.num; i++) { - + for (i=0; i < m.num; i++) { pgd = pgd_offset_k(m2pv); pud = pud_offset(pgd, m2pv); pmd = pmd_offset(pud, m2pv); - m2p_mfn = (*(uint64_t *)pmd >> PAGE_SHIFT)&0xFFFFFFFF; - + m2p_mfn = (*(uint64_t *)pmd >> PAGE_SHIFT)&0xFFFFFFFF; + m2p_mfn += pte_index(m2pv); + if (put_user(m2p_mfn, p + i)) return -EFAULT; -- 2.30.2